diff options
Diffstat (limited to 'app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx')
| -rw-r--r-- | app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx b/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx index ab63c14f..6830dbe9 100644 --- a/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx +++ b/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx @@ -37,14 +37,16 @@ interface RfqPageProps { // 탭별 데이터 카운트를 가져오는 함수 async function getTabCounts() { try { - const [generalData, itbData, rfqData] = await Promise.all([ + const [generalData, preBiddingData, itbData, rfqData] = await Promise.all([ getRfqs({ page: 1, perPage: 1, sort: [], filters: [], joinOperator: "and", search: "", rfqCategory: "general" }), + getRfqs({ page: 1, perPage: 1, sort: [], filters: [], joinOperator: "and", search: "", rfqCategory: "pre_bidding" }), getRfqs({ page: 1, perPage: 1, sort: [], filters: [], joinOperator: "and", search: "", rfqCategory: "itb" }), getRfqs({ page: 1, perPage: 1, sort: [], filters: [], joinOperator: "and", search: "", rfqCategory: "rfq" }), ]); return { general: generalData.total || 0, + pre_bidding: preBiddingData.total || 0, itb: itbData.total || 0, rfq: rfqData?.total || 0, }; @@ -52,6 +54,7 @@ async function getTabCounts() { console.error("Error fetching tab counts:", error); return { general: 0, + pre_bidding: 0, itb: 0, rfq: 0, }; @@ -76,6 +79,7 @@ export default async function RfqPage(props: RfqPageProps) { // 각 탭별로 데이터 프리패칭 // const allData = await getRfqs({ ...search, rfqCategory: "all" }); const generalData = await getRfqs({ ...search, rfqCategory: "general" }); + const preBiddingData = await getRfqs({ ...search, rfqCategory: "pre_bidding" }); const itbData = await getRfqs({ ...search, rfqCategory: "itb" }); const rfqData = await getRfqs({ ...search, rfqCategory: "rfq" }); @@ -94,7 +98,7 @@ export default async function RfqPage(props: RfqPageProps) { {/* 탭 컨테이너 */} <Tabs defaultValue={currentTab} className="w-full flex-1 flex flex-col overflow-hidden"> - <TabsList className="grid w-full max-w-[600px] grid-cols-3 flex-shrink-0"> + <TabsList className="grid w-full max-w-[800px] grid-cols-4 flex-shrink-0"> <TabsTrigger value="itb" className="relative"> <Package className="mr-2 h-4 w-4" /> @@ -123,6 +127,15 @@ export default async function RfqPage(props: RfqPageProps) { </Badge> )} </TabsTrigger> + <TabsTrigger value="pre_bidding" className="relative"> + <FileText className="mr-2 h-4 w-4" /> + 사전견적(입찰) + {tabCounts.pre_bidding > 0 && ( + <Badge variant="secondary" className="ml-2 text-xs"> + {tabCounts.pre_bidding} + </Badge> + )} + </TabsTrigger> </TabsList> @@ -160,6 +173,40 @@ export default async function RfqPage(props: RfqPageProps) { </React.Suspense> </TabsContent> + {/* 사전견적(입찰) 탭 */} + <TabsContent value="pre_bidding" className="mt-4 flex-1 overflow-hidden relative"> + <React.Suspense + fallback={ + <DataTableSkeleton + columnCount={13} + searchableColumnCount={4} + filterableColumnCount={8} + cellWidths={[ + "3rem", // checkbox + "9rem", // rfqCode + "7rem", // status + "8rem", // rfqType + "15rem", // rfqTitle + "8rem", // projectCode + "12rem", // projectName + "8rem", // picName + "5rem", // rfqSendDate + "5rem", // dueDate + "5rem", // vendorCount + "5rem", // quotationReceived + "5rem", // actions + ]} + shrinkZero + /> + } + > + <RfqTable + data={preBiddingData} + rfqCategory="pre_bidding" + /> + </React.Suspense> + </TabsContent> + {/* ITB 탭 */} <TabsContent value="itb" className="mt-4 flex-1 overflow-hidden relative"> <React.Suspense |
